/*
 * @brief IO引脚控制的传感器
 * @brief 红外：PC8.  有人时为1
 * @brief 震动：PA12. 发生震动时为1
 * @brief 霍尔：PD11. 有磁铁时为1
 * @brief 火焰：PE6.  有火焰时为1
 * @brief 光栅：PD13. 有遮挡时为1
 * @brief 风扇：PE5.  打开时为1
 * @brief 电磁锁：PA11 打开时为1
 */

#include <rtthread.h>
#include <rtdevice.h>
#include <drv_common.h>
#include <sensor_pindev.h>

#define DBG_TAG "pinsensor.c"
#define DBG_LVL DBG_LOG
#include <rtdbg.h>

#define INFRARED_RTTPIN     (GET_PIN(C, 8))     // 红外：PC8.  有人时为1
#define VIBRATION_RTTPIN    (GET_PIN(A, 12))    // 震动：PA12. 发生震动时为1
#define HALL_RTTPIN         (GET_PIN(D, 11))    // 霍尔：PD11. 有磁铁时为1
#define FLAME_RTTPIN        (GET_PIN(E, 6))     // 火焰：PE6.  有火焰时为1
#define GRATING_RTTPIN      (GET_PIN(D, 13))    // 光栅：PD13. 有遮挡时为1
#define FAN_RTTPIN          (GET_PIN(E, 5))     // 风扇：PE5.  打开时为1
#define LOCK_RTTPIN         (GET_PIN(A, 11))    // 电磁锁：PA11 打开时为1

/**
 * @brief  开风扇
 * @param  无
 * @return 无
 */
void fan_on(void)
{
    rt_pin_write(FAN_RTTPIN, PIN_HIGH); // 打开时为1
}

/**
 * @brief  关风扇
 * @param  无
 * @return 无
 */
void fan_off(void)
{
    rt_pin_write(FAN_RTTPIN, PIN_LOW);
}

/**
 * @brief  关电磁锁
 * @param  无
 * @return 无
 */
void lock_off(void)
{
    rt_pin_write(LOCK_RTTPIN, PIN_LOW);
}

/**
 * @brief  开电磁锁
 * @param  无
 * @return 无
 */
void lock_on(void)
{
    rt_pin_write(LOCK_RTTPIN, PIN_HIGH); // 打开时为1
}

/**
 * @brief  获取IO传感器状态
 * @param  存储结果的结构体
 * @return 无
 */
void pin_sensor_read(pin_sensor_status_st *sensor_status)
{
    sensor_status->infrared = rt_pin_read(INFRARED_RTTPIN) == 1 ? 1 : 0;
    sensor_status->vibration = rt_pin_read(VIBRATION_RTTPIN) == 0 ? 1 : 0;
    sensor_status->hall = rt_pin_read(HALL_RTTPIN) == 0 ? 1 : 0;
    sensor_status->flame = rt_pin_read(FLAME_RTTPIN) == 1 ? 1 : 0;
    sensor_status->grating = rt_pin_read(GRATING_RTTPIN) == 1 ? 1 : 0;
    sensor_status->fan = rt_pin_read(FAN_RTTPIN) == 1 ? 1 : 0;
    sensor_status->lock = rt_pin_read(LOCK_RTTPIN) == 1 ? 1 : 0;
}

/**
 * @brief  IO传感控制器引脚初始化
 * @param  无
 * @return 无
 */
void pin_sensor_init(void)
{
    // 传感器：输入模式
    rt_pin_mode(INFRARED_RTTPIN, PIN_MODE_INPUT);
    rt_pin_mode(VIBRATION_RTTPIN, PIN_MODE_INPUT);
    rt_pin_mode(HALL_RTTPIN, PIN_MODE_INPUT);
    rt_pin_mode(FLAME_RTTPIN, PIN_MODE_INPUT);
    rt_pin_mode(GRATING_RTTPIN, PIN_MODE_INPUT);

    // 控制器：输出模式
    rt_pin_mode(FAN_RTTPIN, PIN_MODE_OUTPUT);
    rt_pin_mode(LOCK_RTTPIN, PIN_MODE_OUTPUT);

    fan_off();      //关闭风扇
    lock_off();     //关闭电磁锁
}

/**
 * @brief  使用命令打开风扇
 * @param  无
 * @return 无
 */
void fan_dev_on(void)
{
    fan_on();
}
MSH_CMD_EXPORT(fan_dev_on, fan_dev_on);

/**
 * @brief  使用命令关闭风扇
 * @param  无
 * @return 无
 */
void fan_dev_off(void)
{
    fan_off();
}
MSH_CMD_EXPORT(fan_dev_off, fan_dev_off);
